// 定义物品的数据结构接口
interface IItem {
  id: number;
  name: string;
  category: string;
  value: number | null;
  price: number;
  limit: number;
  description: string;
  status: 'enable' | 'disable';
}

Page({
  data: {
    itemList: [] as IItem[],
    showFormPopup: false,
    isEditMode: false,
    isSaving: false, // 控制保存按钮的loading状态

    // 表单相关数据
    formData: {} as Partial<IItem>, // 使用 Partial<IItem> 方便处理空表单
    editingIndex: -1, // 正在编辑的物品在列表中的索引

    // 分类选择器数据
    categoryOptions: ['实物', '现金', '学分', '代金券', '二课课时'],
    categoryIndex: -1,
  },

  onLoad() {
    this.fetchItemList();
  },

  /**
   * 模拟从后端获取物品列表
   */
  fetchItemList() {
    wx.showLoading({ title: '加载中...' });
    // 模拟网络请求
    setTimeout(() => {
      const mockData: IItem[] = [
        { id: 1, name: '微信零钱', category: '现金', value: 10, price: 1000, limit: 100, description: '直接发放到微信零钱', status: 'enable' },
        { id: 2, name: '创新创业学分', category: '学分', value: 1, price: 5000, limit: 10, description: '可抵扣1个创新创业学分', status: 'enable' },
        { id: 3, name: '驾校50元优惠券', category: '代金券', value: 50, price: 500, limit: 0, description: '报名驾校时可抵扣50元现金', status: 'disable' },
      ];
      this.setData({ itemList: mockData });
      wx.hideLoading();
    }, 1000);
  },

  /**
   * 统一的 Toast 提示
   * @param title 提示内容
   */
  showToast(title: string) {
    wx.showToast({
      title,
      icon: 'none',
      duration: 2000
    });
  },

  /**
   * 点击新增按钮
   */
  handleAddNew() {
    this.setData({
      isEditMode: false,
      formData: {
        name: '',
        category: '',
        value: null,
        price: undefined, // 使用 undefined 让 placeholder 生效
        limit: 0,
        description: '',
        status: 'enable', // 默认上架
      },
      categoryIndex: -1,
      showFormPopup: true,
    });
  },

  /**
   * 点击编辑按钮
   */
  handleEdit(event: WechatMiniprogram.TouchEvent) {
    const index = event.currentTarget.dataset.index as number;
    const itemToEdit = this.data.itemList[index];

    this.setData({
      isEditMode: true,
      editingIndex: index,
      // 深拷贝一份数据到formData，避免双向绑定直接修改列表数据
      formData: JSON.parse(JSON.stringify(itemToEdit)),
      categoryIndex: this.data.categoryOptions.indexOf(itemToEdit.category),
      showFormPopup: true,
    });
  },

  /**
   * 点击删除按钮
   */
  handleDelete(event: WechatMiniprogram.TouchEvent) {
    const { id, index } = event.currentTarget.dataset;
    wx.showModal({
      title: '确认删除',
      content: `你确定要删除物品「${this.data.itemList[index].name}」吗？此操作不可撤销。`,
      confirmColor: '#f56c6c',
      success: (res) => {
        if (res.confirm) {
          console.log(`调用API删除ID为 ${id} 的物品`);
          // 模拟API调用
          wx.showLoading({ title: '删除中...' });
          setTimeout(() => {
            const newList = [...this.data.itemList];
            newList.splice(index, 1);
            this.setData({ itemList: newList });
            wx.hideLoading();
            this.showToast('删除成功');
          }, 500);
        }
      },
    });
  },

  /**
   * 关闭弹窗
   */
  onClosePopup() {
    this.setData({ showFormPopup: false });
  },

  /**
   * 分类选择器变更
   */
  onCategoryChange(event: WechatMiniprogram.BaseEvent) {
    const index = Number(event.detail.value);
    this.setData({
      categoryIndex: index,
      'formData.category': this.data.categoryOptions[index],
    });
  },

  /**
   * 表单提交
   */
  handleFormSubmit(event: WechatMiniprogram.FormSubmit) {
    const values = event.detail.value;

    // --- 表单校验 ---
    if (!values.name.trim()) {
      return this.showToast('请输入物品名称');
    }
    if (!this.data.formData.category) {
      return this.showToast('请选择物品分类');
    }
    if (values.price === '' || isNaN(Number(values.price)) || Number(values.price) < 0) {
      return this.showToast('请输入有效的所需松果币');
    }

    // --- 构造提交数据 ---
    const newItemData: IItem = {
      id: this.data.isEditMode ? this.data.formData.id! : Date.now(), // 模拟生成新ID
      name: values.name.trim(),
      category: this.data.formData.category!,
      value: values.value ? Number(values.value) : null,
      price: Number(values.price),
      limit: values.limit ? Number(values.limit) : 0,
      description: values.description.trim(),
      status: values.status ? 'enable' : 'disable',
    };

    this.setData({ isSaving: true });

    // --- 模拟API提交 ---
    console.log('提交的数据:', newItemData);
    wx.showLoading({ title: '保存中...' });

    setTimeout(() => {
      const { itemList, isEditMode, editingIndex } = this.data;
      const newList = [...itemList];

      if (isEditMode) {
        // 编辑模式
        newList[editingIndex] = newItemData;
      } else {
        // 新增模式
        newList.unshift(newItemData); // 新增的物品放在最前面
      }

      this.setData({
        itemList: newList,
        isSaving: false,
        showFormPopup: false,
      });

      wx.hideLoading();
      this.showToast('保存成功');
    }, 1000);
  },
});
